package com.zhihaoliang.coroutine.buss.flow.func

import com.zhihaoliang.coroutine.util.log
import kotlinx.coroutines.*
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.flow
import kotlin.coroutines.coroutineContext

/**
 * @author 支豪亮
 * @date 2022/10/24 14:38
 * @des 超时
 */
object FlowTimeout {
    fun onFlowTimeout(mainScope: CoroutineScope) = mainScope.launch {
        try {
            withTimeout(250) { // 在 250 毫秒后超时
                simple().collect { value -> log("$value") }
            }
        } catch (e: Exception) {
            log("Exception : $e")
        }
        log("Done")
    }

    private fun simple(): Flow<Int> = flow { // 流构建器
        for (i in 1..3) {
            log("simpleFlow", coroutineContext)
            delay(100) // 假装我们在这里做了一些有用的事情
            emit(i) // 发送下一个值
        }
    }

    fun onTimeoutOrNull(mainScope: CoroutineScope) = mainScope.launch {
        withTimeoutOrNull(250) { // 在 250 毫秒后超时
            simple().collect { value -> log("$value") }
        }
        log("Done")

    }

}